﻿using System;
using System.Diagnostics;
using System.Drawing;
using System.Windows.Forms;
using fb.component.contracts;
using fb.messages.contracts;

namespace fragebogen.portal
{
    public partial class Portal : Form, IPortal
    {
        private Action<string> out_FragebogenLaden;
        private Action<int> out_GruppenAnfrage;
        private Action<int> out_AntwortmöglichkeitGewählt;
        private Action out_AuswertungsAnfrage;

        public Portal()
        {
            InitializeComponent();


        }

        public Portal( IFragebogenAdapter fragebogenAdapter, IBefragung befragung ) : this()
        {
            this.out_FragebogenLaden = fragebogenAdapter.In_Laden;
            fragebogenAdapter.Out_FragebogenGeladen = befragung.In_Fragebogen;

            this.out_GruppenAnfrage = befragung.In_GruppenAnfrage;
            this.Out_AntwortmöglichkeitGewählt = befragung.In_AntwortGegeben;
            befragung.Out_ViewDerAktuellenBefragungsGruppe = this.In_AktuelleBefragungsGruppe;


        }

        public void In_AktuelleBefragungsGruppe(IBefragungsGruppeViewData befragungsGruppe)
        {
            Trace.TraceInformation("Portal: In_AktuelleBefragungsGruppe ") ;

            this.treeViewFragebogen.Nodes.Clear();
            Font fontSelected = new Font("Arial" , 10 , FontStyle.Bold );
            Font fontNormal = new Font("Arial", 10, FontStyle.Regular );
             
            this.textBoxGruppenName.Text = befragungsGruppe.Name;

            foreach( IFrageViewData frage in befragungsGruppe.Fragen )
            {
                this.textBoxFragenDump.Text += frage.Text + "\r\n";

                Trace.TraceInformation("Portal: In_AktuelleBefragungsGruppe Frage:" + frage.Text );


                TreeNode node = treeViewFragebogen.Nodes.Add(frage.Text);
                node.NodeFont = fontNormal;

                foreach ( IAntwortmöglichkeitViewData antwort in frage.Antwortmöglichkeiten )
                {
                    string s  = antwort.Text + ( antwort.IstGewählt
                                                       ? "  X"
                                                       : "  ." ) + "   ID:" + antwort.Id;
                    this.textBoxFragenDump.Text += s + "\r\n";

                    TreeNode answerNode = node.Nodes.Add(  s );
                    answerNode.Tag = antwort.Id;

                    Trace.TraceInformation("Portal: In_AktuelleBefragungsGruppe Frage - Antwortmöglichkeit " + antwort.Text);
                    answerNode.NodeFont = antwort.IstGewählt ? fontSelected : fontNormal;
                }
                

            }
            this.treeViewFragebogen.ExpandAll();

 
        }

        public Action<string> Out_FragebogenLaden
        {
            set { out_FragebogenLaden = value; }
        }

        public Action Out_AuswertungsAnfrage
        {
            set {
                out_AuswertungsAnfrage = value; }
        }

        public Action<int> Out_GruppenAnfrage
        {
            set { out_GruppenAnfrage = value; }
        }

        public Action<int> Out_AntwortmöglichkeitGewählt
        {
            set {
                out_AntwortmöglichkeitGewählt = value;
            }
        }

        private void Portal_Load(object sender, EventArgs e)
        {
            this.out_FragebogenLaden("dummy filename");

        }

        private void treeViewFragebogen_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Node.Tag != null)
            {
                this.textBoxFragenDump.Text += "Antowrt " + e.Node.Tag + " geklickt. \r\n";
                int id = int.Parse(e.Node.Tag.ToString());
                out_AntwortmöglichkeitGewählt(id);
            }
        }
    }
}
